package com.analysis.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 * 密码加密工具类
 * 使用BCrypt算法进行密码加密和验证
 */
public class PasswordUtils {
    
    private static final PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    
    /**
     * 加密密码
     * @param rawPassword 原始密码
     * @return 加密后的密码
     */
    public static String encodePassword(String rawPassword) {
        if (rawPassword == null || rawPassword.trim().isEmpty()) {
            throw new IllegalArgumentException("密码不能为空");
        }
        return passwordEncoder.encode(rawPassword);
    }
    
    /**
     * 验证密码
     * @param rawPassword 原始密码
     * @param encodedPassword 加密后的密码
     * @return 密码是否匹配
     */
    public static boolean matches(String rawPassword, String encodedPassword) {
        if (rawPassword == null || encodedPassword == null) {
            return false;
        }
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
    
    /**
     * 检查密码是否为加密格式
     * BCrypt加密后的密码通常以$2a$开头
     * @param password 密码
     * @return 是否为加密格式
     */
    public static boolean isEncoded(String password) {
        return password != null && password.startsWith("$2a$");
    }


    public static void main(String[] args) {
        System.out.println(encodePassword("admin123"));
        System.out.println(matches("admin123","$2a$10$lrVU.m0r0qtE1GHKLbsdmuUV.pNrZaQ7osITpKUrPLiBjGEMXMBN1"));;
    }
}
